As computer systems become increasingly powerful, tasks that once were accomplished by dedicated hardware systems are now being performed by generic hardware that operates specialized computer software. As a result, computer software is becoming increasingly complex and requires a significant effort to design as well as the application of strict quality control techniques to insure that the software operates properly under all conditions.
One environment in which computer software is increasingly used is in telecommunication equipment. In the past, telephone switches, like private branch exchanges or central office switches, have had hardware-specific equipment that connects to or controls specific types of telephone equipment such as rotary phones, digital phones, message phones, etc. The software used to control this equipment has resided in a large in-line code file that is executed by a central processing unit or by one of a number of individual processors.
While a single in-line code file works well for software that is fully operational, this architecture presents problems if modifications need to be made. For example, if a new feature, such as a distinctive ringing signal needs to be added to a specific type of telephone equipment, then it was previously necessary to edit the large in-line code file. The software code required to provide the new function would have to be added to the in-line code file, and all references within the code file that refer to the feature would need to be modified to reflect the new functions provided. However, by editing the in-line code file, the programmer could never be certain that a change had not been inadvertently made to a portion of the code that was not intended to be modified. For example, if a feature that provides a new ringing signal to a rotary phone is added, a programmer could not be certain that an inadvertent change was not made that would affect the operation of the digital phones, etc. Therefore, upon each modification of the in-line code, extensive testing techniques were required to make sure that all functions provided by the software were still operational. This method of editing an in-line code file was both time intensive and costly, even when only simple modifications were made to the controlling software. Furthermore, by grouping all the software code in a single code file, only one programmer could access the code at any given time, thereby decreasing programmer efficiency.
In light of the problems associated with modifying large in-line code files, it was recognized that methods were needed to allow computer programs that operate in multi-platform environments to be easily modified without the need to retest those portions of the code that were unaffected.